package com.lyft.scoop.transitions; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.annotation.TargetApi; import android.os.Build; import android.view.View; import android.view.ViewGroup; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import com.lyft.scoop.TransitionListener; @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) public class FadeTransition extends ObjectAnimatorTransition { public static final long DEFAULT_FADE_TIME = 250L; private final long fadeTime; private final Interpolator interpolator; public FadeTransition() { this.fadeTime = DEFAULT_FADE_TIME; this.interpolator = new LinearInterpolator(); } public FadeTransition(final long fadeTime, final Interpolator interpolator) { this.fadeTime = fadeTime; this.interpolator = interpolator; } @Override public void performTranslate(final ViewGroup root, final View from, View to, final TransitionListener transitionListener) { Animator animator = createAnimator(from, to); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { root.removeView(from); transitionListener.onTransitionCompleted(); } }); animator.start(); } private Animator createAnimator(View from, View to) { AnimatorSet set = new AnimatorSet(); if (from != null) { ObjectAnimator fadeOut = ObjectAnimator.ofFloat(from, View.ALPHA, 1f, 0f).setDuration(fadeTime); fadeOut.setInterpolator(interpolator); set.play(fadeOut); } if (to != null) { ObjectAnimator fadeIn = ObjectAnimator.ofFloat(to, View.ALPHA, 0f, 1f).setDuration(fadeTime); fadeIn.setInterpolator(interpolator); set.play(fadeIn); } return set; } }